package zaplog

import (
	"github.com/natefinch/lumberjack"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

var Logger *zap.Logger

// 初始化
func init() {
	writeSyncer := getLogWriter()
	encoder := getEncoder()
	core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)
	Logger = zap.New(core, zap.AddCaller())
	//Logger, _ = zap.NewProduction()
}

func getEncoder() zapcore.Encoder {
	// 修改默认的输出格式
	encoderConfig := zap.NewProductionEncoderConfig()
	encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder // 人类可读友好时间格式
	encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder

	// 按照 json格式
	return zapcore.NewJSONEncoder(encoderConfig)
	// 普通
	//return zapcore.NewConsoleEncoder(zap.NewProductionEncoderConfig())

}

func getLogWriter() zapcore.WriteSyncer {
	// io.Writer()
	//os.Create是每次覆盖
	//file, _ := os.Create("test2.log")

	// 追加模式
	//file, _ := os.OpenFile("test3.log", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0744)
	// 如果没有实现 Sync 方法， 赋值给一个实现了 Sync方法的结构体类型实例
	//return zapcore.AddSync(file)

	lumberJackLogger := &lumberjack.Logger{
		Filename:   "test4.log",
		MaxSize:    1,     // M
		MaxBackups: 5,     // 备份数量
		MaxAge:     30,    // 最大备份天数
		Compress:   false, // 是否压缩
	}
	return zapcore.AddSync(lumberJackLogger)
}
